package com.xiaoshuidi.cloud.module.member.service.securitycheck;

import java.util.*;
import javax.validation.*;
import javax.validation.constraints.NotNull;

import com.baomidou.mybatisplus.extension.service.IService;
import com.xiaoshuidi.cloud.module.member.controller.admin.securitycheck.vo.*;
import com.xiaoshuidi.cloud.framework.common.pojo.PageResult;
import com.xiaoshuidi.cloud.module.member.pojo.securitycheck.SecurityCheckDO;
import com.xiaoshuidi.cloud.module.member.pojo.securitycheck.SecurityCheckRectificationFileDO;

/**
 * 安全检查 Service 接口
 *
 * @author hans.zhang
 */
public interface SecurityCheckService extends IService<SecurityCheckDO> {

    /**
     * 创建安全检查
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    Long createSecurityCheck(@Valid SecurityCheckCreateReqVO createReqVO);

    /**
     * 更新安全检查
     *
     * @param updateReqVO 更新信息
     */
    void updateSecurityCheck(@Valid SecurityCheckUpdateReqVO updateReqVO);

    /**
     * 删除安全检查
     *
     * @param id 编号
     */
    void deleteSecurityCheck(Long id);

    /**
     * 获得安全检查
     *
     * @param id 编号
     * @return 安全检查
     */
    SecurityCheckDO getSecurityCheck(Long id);

    /**
     * 获得安全检查列表
     *
     * @param ids 编号
     * @return 安全检查列表
     */
    List<SecurityCheckDO> getSecurityCheckList(Collection<Long> ids);

    /**
     * 获得安全检查分页
     *
     * @param pageReqVO 分页查询
     * @return 安全检查分页
     */
    PageResult<SecurityCheckRespVO> getSecurityCheckPage(SecurityCheckPageReqVO pageReqVO);

    /**
     * 获得安全检查列表, 用于 Excel 导出
     *
     * @param exportReqVO 查询条件
     * @return 安全检查列表
     */
    List<SecurityCheckDO> getSecurityCheckList(SecurityCheckExportReqVO exportReqVO);

    /**
     * 根据id查询
     * @param id
     * @return
     */
    SecurityCheckDO myGetById(@NotNull Long id);

    Boolean pigeonhole(@NotNull(message = "id不能为空") Long id);

    /**
     * 上传整改文件
     *
     * @param loginUserName
     * @param securityCheckId
     * @param fileUrl
     * @param fileType
     * @return
     */
    Long uploadRectificationFile(String loginUserName, Long securityCheckId, String fileUrl, String fileType);

    /**
     * 删除整改文件
     *
     * @param rectificationFileId 整改文件id
     * @param securityCheckId
     * @return
     */
    Boolean rectificationFileDelete(@NotNull(message = "整改文件id不能为空") Long rectificationFileId,@NotNull(message = "安全检查id不能为空") Long securityCheckId);

    /**
     * 整改文件分页
     *
     * @param securityCheckId
     * @param pageNo
     * @param pageSize
     * @return
     */
    PageResult<SecurityCheckRectificationFileDO> rectificationFilePage(Long securityCheckId, Integer pageNo, Integer pageSize);

    /**
     * 检查是否已归档
     * @param securityCheckId
     * @return
     */
    void checkIsPlaceOnFile(Long securityCheckId);
}
